package javase2.day03.demo02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/*
java.util.Collections是集合工具类，用来对集合进行操作。
public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
注意：
    sort(List<T> list)使用前提
    被排序的集合里边储存元素，必须实现Comparable，重写接口中的方法compare To定义排序规定
Comparable接口排序规则：
    自己(this)-参数：升序。反之降序。
------------------------------------------
public static <T> void sort(List<T> list，Comparator<? super T> )
将集合中元素按照指定规则排序。
        Comparator和Comparable区别
            Comparable：自己和别人的参数比较，自己需要实现Comparable接口，重写比较规则compare
            Compartor：相当于自定义规则
        Compartor的排序规则：
        01-02：升序
 */
public class Demo07Sort {
    public static void main(String[] args) {
        ArrayList<Integer> intyArray=new ArrayList<>();
        intyArray.add(3);
        intyArray.add(6);
        intyArray.add(1);
        System.out.println(intyArray);//[3, 6, 1]
        Collections.sort(intyArray);
        System.out.println(intyArray);//[1, 3, 6]
        System.out.println("--------------------------");
        ArrayList<String> stringArray=new ArrayList<>();
        stringArray.add("刘");
        stringArray.add("佳");
        stringArray.add("辉");
        System.out.println(stringArray);//[刘, 佳, 辉]
        Collections.sort(stringArray);
        System.out.println(stringArray);//[佳, 刘, 辉]
        System.out.println("--------------------------");

        ArrayList<Student> studentArray=new ArrayList<>();
        studentArray.add(new Student("张三",19));
        studentArray.add(new Student("李四",12));
        studentArray.add(new Student("王五",29));
        studentArray.add(new Student("赵六",32));
        System.out.println(studentArray);
        Collections.sort(studentArray);
        //[Student{name='张三', age=19}, Student{name='李四', age=12}, Student{name='王五', age=29}, Student{name='赵六', age=32}]
        System.out.println(studentArray);
        //[Student{name='赵六', age=32}, Student{name='王五', age=29}, Student{name='张三', age=19}, Student{name='李四', age=12}]

        ArrayList<Hero> heroArray=new ArrayList<>();
        heroArray.add(new Hero("z无极剑圣",12));
        heroArray.add(new Hero("疾风剑豪",16));
        heroArray.add(new Hero("嘉文四世",13));
        heroArray.add(new Hero("g无极剑圣",12));
        System.out.println(heroArray);
        Collections.sort(heroArray, new Comparator<Hero>() {
            @Override
            public int compare(Hero o1, Hero o2) {
                int result =o1.getAge()-o2.getAge();
                if(result==0){
                    result =o1.getName().charAt(0)-o2.getName().charAt(0);
                }
                return result;
            }

        });
        System.out.println(heroArray);
        //[Hero{name='g无极剑圣', age=12}, Hero{name='z无极剑圣', age=12}, Hero{name='嘉文四世', age=13}, Hero{name='疾风剑豪', age=16}]


    }
}
